随笔分类
享元模式
FlyWeight
结构型模式之一
通过与其他类似对象共享数据来减少内存的占用
代码实现
public class Person {
public Person(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
String name;
int age;
String sex;
}
public class Teacher extends Person{
public void setNum(String num) {
this.num = num;
}
String num;
public Teacher(String name, int age, String sex, String num) {
super(name, age, sex);
this.num = num;
}
public Teacher(){
super(null, 0, null);
};
}
/**
* 享元工厂
* 保存享元数据并且进行分配
*/
public class FlyWeightFactory {
private Map<String, Teacher> pool;//键值对池子
public FlyWeightFactory(){
pool = new HashMap<>();
}
public Teacher getTeacher(String s){ //根据编号去寻找Teacher,编号唯一
Teacher teacher = pool.get(s);
if(teacher == null){
teacher = new Teacher();
teacher.setNum(s);
pool.put(s, teacher);
}
return teacher;
}
}
public class MainClass {
public static void main(String[] args) {
//创建一个享元
FlyWeightFactory flyWeightFactory = new FlyWeightFactory();
Teacher teacher = flyWeightFactory.getTeacher("1");
Teacher teacher2 = flyWeightFactory.getTeacher("2");
Teacher teacher3 = flyWeightFactory.getTeacher("1");
Teacher teacher4 = flyWeightFactory.getTeacher("1");
System.out.println(teacher == teacher3); //true
}
}
应用场景
运用共享技术有效的支持大量细粒度的对象。也就是说当项目中需要应用大量相同或相似的功能代码时,那么对于硬盘、内存、CPU、数据库空间等服务器资源均可达到共享。以减少服务器资源,提高利用率